<?php

namespace WebExpres\ServiciosBundle\Controller;

// Aquestes son les classes que afegire per defecte
use WebExpres\ConfigBundle\Controller\DefaultController;
use Symfony\Component\HttpFoundation\Request;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

// Aqui vaig instacia de la classe que gestiona la BBDD
use WebExpres\ServiciosBundle\Entity\Servicios;
use WebExpres\ServiciosBundle\Entity\ServiciosTradus;
use WebExpres\ServiciosBundle\Entity\Serviciosarticle;

class ServiciosController extends DefaultController
{
    
    public function servicioAction($ididioma)
    {
        
        $Configuracio = $this->controlOpcio();
        $HotelsPublicats = $this->consultahayHoteles();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                $ComLanguage = $this->consultaLanguages($ididioma);
                
                if (count($ComLanguage) == 0) {
                    
                   $ididioma = 1;
                   $this->get('session')->setFlash("error", "No estas pasando un idioma valido");
                   
                }
                
                $em = $this->getDoctrine()->getEntityManager();
                $Serveis = $em->getRepository('ServiciosBundle:Servicios')->findAll();
                
                $ServeisArray = array();
                
                foreach($Serveis as $i => $Servei) {

                    $IdServei = $Servei->getId();
                    
                    $ServeiTradu = $em->getRepository('ServiciosBundle:ServiciosTradus')->findOneBy(
                        array('idservicio' => $IdServei, 'ididioma' => $ididioma)
                    );
                    
                    if (!is_object($ServeiTradu)) {
                        
                        //No hi ha traduccio
                    
                        $defaultididioma = 1;
                        
                        $ServeiTradu = $em->getRepository('ServiciosBundle:ServiciosTradus')->findOneBy(
                            array('idservicio' => $IdServei, 'ididioma' => $defaultididioma)
                        );
                        
                        $IdValor = $ServeiTradu->getId();
                        $IdservicioValor = $ServeiTradu->getIdservicio();
                        $NombreservicioValor = $ServeiTradu->getNombreservicio();
                        $TraduccioValor = 0;
                        
                    } else {
                        
                        //Hi ha traduccio
                        
                        $IdValor = $ServeiTradu->getId();
                        $IdservicioValor = $ServeiTradu->getIdservicio();
                        $NombreservicioValor = $ServeiTradu->getNombreservicio();
                        $TraduccioValor = 1;
                        
                    }
                    
                    $ServeisArray[$i]['id'] = $IdValor;
                    $ServeisArray[$i]['idservicio'] = $IdservicioValor;
                    $ServeisArray[$i]['nombreservicio'] = $NombreservicioValor;
                    $ServeisArray[$i]['traduccio'] = $TraduccioValor;

                }
                
                $languages = $this->consultaLanguages(0);
                
                if (count($languages) == 1) {
                   
                    $languages = "";
                    
                }
                
                // Hi ha configuracio Inicial
                return $this->render('ServiciosBundle:Default:llistaserveis.html.twig', array('configuracio' => $Configuracio, "hotelspublicats" => $HotelsPublicats, 'servicios' => $ServeisArray, 'ididioma' => $ididioma, 'languages' => $languages));
     
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }
        
    }
    
    public function anadirservicioAction($ididioma) {
        
        $Configuracio = $this->controlOpcio();
        $HotelsPublicats = $this->consultahayHoteles();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                $modi = 0;
                
                return $this->render('ServiciosBundle:Default:formserveis.html.twig', array('configuracio' => $Configuracio, "hotelspublicats" => $HotelsPublicats, 'modi' => $modi));
     
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }
        
    }
    
    public function anadirserviciosaveAction($ididioma) {
        
        $Configuracio = $this->controlOpcio();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                // Em poso a validar el event click del boto, i si tot es correcte, fare el insert
                
                $request = $this->getRequest();
                
                $botoFormulariServicios = $request->request->get('ServeisGuarda');
                
                if (isset($botoFormulariServicios)) {
                
                    // Hi ha click
                    
                    $NombreServicio = $request->request->get('nombreservicio');
                    
                    if ($NombreServicio != "") {

                        // Aqui guardo el servei
                        $insertServicios = new Servicios();
                        $insertServicios->setCreatedAt(new \DateTime('now'));
                        $insertServicios->setUpdatedAt(new \DateTime('now'));
                        $accioServicios = $insertServicios;

                        $ec = $this->getDoctrine()->getEntityManager();
                        $ec->persist($accioServicios);
                        $ec->flush();

                        // Aqui guardo els textes del servei
                        $insertServiciosTradus = New ServiciosTradus();
                        $insertServiciosTradus->setIdservicio($accioServicios->getId());
                        $insertServiciosTradus->setNombreservicio($NombreServicio);
                        $insertServiciosTradus->setIdidioma($ididioma);
                        $insertServiciosTradus->setCreatedAt(new \DateTime('now'));
                        $insertServiciosTradus->setUpdatedAt(new \DateTime('now'));
                        $accioServiciosTradus = $insertServiciosTradus;

                        $ec = $this->getDoctrine()->getEntityManager();
                        $ec->persist($accioServiciosTradus);
                        $ec->flush();

                        $this->get('session')->setFlash("success", "Servicio creado correctamente.");
                        
                    } else {
                        
                        $this->get('session')->setFlash("error", "Los campos con asterisco son obligatorios.");
                        
                    }
                    
                    return $this->redirect($this->generateUrl('ServiciosBundle_formulario_alta'));
                    
                } else {
                    
                    // No hi ha click
                    
                    $this->get('session')->setFlash("error", "No se que intentas hacer.");
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
                    
                }
                
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }        
        
    } 
    
    public function editservicioAction($ididioma, $idservicio) {
        
        $Configuracio = $this->controlOpcio();
        $HotelsPublicats = $this->consultahayHoteles();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                // Comprovo si lo que em pasen es un idioma valid
                $ComLanguage = $this->consultaLanguages($ididioma);
                
                if (count($ComLanguage) != 0) {
                    
                    // Es valid
                
                    // Comprovo si es un idservicio valido
                    if ($idservicio != 0) {
                        
                        // Es valid
                    
                        $session = $this->getRequest()->getSession();

                        $session->set('idservicio', $idservicio);
                        $session->set('ididioma', $ididioma);

                        $em = $this->getDoctrine()->getEntityManager();
                        $ServeiTradu = $em->getRepository('ServiciosBundle:ServiciosTradus')->findOneBy(
                            array('idservicio' => $idservicio, 'ididioma' => $ididioma)
                        );
                        
                        if (is_object($ServeiTradu)) {
                         
                            $modi = 1;

                            return $this->render('ServiciosBundle:Default:formserveis.html.twig', array('configuracio' => $Configuracio, "hotelspublicats" => $HotelsPublicats, 'modi' => $modi, 'servicio' => $ServeiTradu, 'ididioma' => $ididioma));
                            
                        } else {
                            
                            $this->CleanSession();
                        
                            $this->get('session')->setFlash("error", "Estas intentando modificar un Servicio que no existe.");
                            return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
                            
                        }
                    
                    } else {

                        // No es valid
                        $this->get('session')->setFlash("error", "No has escogido ninguna Servicio.");
                        return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
                        
                    }
                    
                } else {

                    // No es valid
                    $this->get('session')->setFlash("error", "No estas pasando un idioma valido");
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
                    
                }
                
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }
        
    }
    
    public function editserviciosaveAction() {
        
        $Configuracio = $this->controlOpcio();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                // Em poso a validar el event click del boto, i si tot es correcte, fare el insert
                
                $request = $this->getRequest();
                
                $botoFormulariServicios = $request->request->get('ServeisGuarda');
                
                if (isset($botoFormulariServicios)) {
                
                    // Hi ha click
                    
                    $session = $this->getRequest()->getSession();

                    $idservicio = $session->get('idservicio');
                    $ididioma = $session->get('ididioma');
                    
                    $NombreServicio = $request->request->get('nombreservicio');
                    
                    if ($NombreServicio != "") {

                        $em = $this->getDoctrine()->getEntityManager();
                        
                        // Aqui guardo el servei
                        $updateServicio = $em->getRepository('ServiciosBundle:Servicios')->find($idservicio);
                        $updateServicio->setUpdatedAt(new \DateTime('now'));
                        $accioServicios = $updateServicio;

                        $ec = $this->getDoctrine()->getEntityManager();
                        $ec->persist($accioServicios);
                        $ec->flush();

                        // Aqui guardo els textes del servei
                        $updateServicioTradu = $em->getRepository('ServiciosBundle:ServiciosTradus')->findOneBy(
                            array('idservicio' => $idservicio, 'ididioma' => $ididioma)
                        );
                        $updateServicioTradu->setIdservicio($accioServicios->getId());
                        $updateServicioTradu->setNombreservicio($NombreServicio);
                        $updateServicioTradu->setUpdatedAt(new \DateTime('now'));
                        $accioServiciosTradus = $updateServicioTradu;

                        $ec = $this->getDoctrine()->getEntityManager();
                        $ec->persist($accioServiciosTradus);
                        $ec->flush();

                        $this->get('session')->setFlash("success", "El Servicio ha sido modificado correctamente.");
 
                    } else {
                        
                        $this->get('session')->setFlash("error", "Los campos con asterisco son obligatorios.");
                        
                    }
                    
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
                    
                } else {
                    
                    // No hi ha click
                    
                    $this->get('session')->setFlash("error", "No se que intentas hacer.");
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
                    
                }
                
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }          
        
    }
    
    public function borrarservicioAction($ididioma, $idservicio) {
      
        $Configuracio = $this->controlOpcio();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                $em = $this->getDoctrine()->getEntityManager();
                $Servei = $em->getRepository('ServiciosBundle:Servicios')->find($idservicio);
                
                if (is_object($Servei)) {
                    
                    // Existeix ID
                    
                    $ServeiRelacion = $em->getRepository('ServiciosBundle:Serviciosarticle')->findOneBy(
                        array('idservicio' => $idservicio)
                    );
                    
                    if (!is_object($ServeiRelacion)) {
                        
                        // No te relacio
                        
                        $em->remove($Servei);
                        $em->flush();

                        $ServeiTradus = $em->getRepository('ServiciosBundle:ServiciosTradus')->findBy(
                            array('idservicio' => $idservicio)
                        );

                        foreach($ServeiTradus as $ServeiTradu) {

                            $em->remove($ServeiTradu);
                            $em->flush();

                        }

                        $this->get('session')->setFlash("success", "El Servicio ha sido borrado correctamente.");
                        
                    } else {
                        
                        // Si te relacio
                        
                        $this->get('session')->setFlash("error", "El Servicio no puede ser borrado por que esta relacionado.");
                        
                    }
                    
                } else {
                    
                    // No existeix ID
                    $this->get('session')->setFlash("error", "Esta intentando borrar un id que no existe.");
                    
                }
                
                return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
     
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }        
        
    }
    
    public function traduservicioAction($ididioma, $idservicio) {
        
        $Configuracio = $this->controlOpcio();
        
        // Netejo la sessio de variables
        $this->CleanSession();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                // Aixo es per comprovar si m'han passat un id idioma valid
                $ComLanguage = $this->consultaLanguages($ididioma);
                    
                // Hi si no es valid, per defecte carrego Español
                if (count($ComLanguage) != 0) {
                    
                    // Es un idioma valid
                    
                    // Comprovo si la $idservicio es diferent a 0, per que si es diferent a 0 vol dir que li passem un id
                    if ($idservicio != 0) {
                        
                        // Li estem passant un $idservicio
                        
                        // Ara comprovare si es un $idservicio valid
                        
                        $em = $this->getDoctrine()->getEntityManager();
                        $Servicio = $em->getRepository('ServiciosBundle:Servicios')->find($idservicio);
                        
                        if (is_object($Servicio)) {
                            
                            // Existeix
                            
                            // Ara comprovare si existeix la traduccio
                            $ServicioTradu = $em->getRepository('ServiciosBundle:ServiciosTradus')->findOneBy(
                                array('idservicio' => $idservicio, 'ididioma' => $ididioma)
                            );
                            
                            if (!is_object($ServicioTradu)) {
                                
                                // No existeix la traduccio
                                
                                $session = $this->getRequest()->getSession();
                                $session->set('idservicio', $idservicio);
                                $session->set('ididioma', $ididioma);
                                
                                $modi = 2;
                                
                                return $this->render('ServiciosBundle:Default:formserveis.html.twig', array('configuracio' => $Configuracio, 'modi' => $modi, 'ididioma' => $ididioma));

                            } else {
                                
                                // Existeix la traduccio
                                
                                $this->get('session')->setFlash("error", "El Servicio ya tiene una traduccion.");
                                return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
                                
                            }
                            
                        } else {
                            
                            // No existeix
                            $this->CleanSession();
                            
                            $this->get('session')->setFlash("error", "El Servicio no existe.");
                            return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
                            
                        }
                        
                    } else {
                     
                        // No li estem passant cap $idservicio
                        $this->get('session')->setFlash("error", "No ha escogido ninguna Servicio.");
                        return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
                        
                    }
                
                } else {
                        
                    // No es un idioma valid
                    $this->get('session')->setFlash("error", "El idioma que recibo, no es el correcto.");
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));
    
                }
                
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }
        
    }
    
    public function traduserviciosaveAction() {
        
        $Configuracio = $this->controlOpcio();
        
        switch ($Configuracio) {
            case 1:
            case 2:
                
                // Hi ha configuracio Inicial
                
                // Em poso a validar el event click del boto, i si tot es correcte, fare el insert
                $request = $this->getRequest();
                
                $botoFormulariServicios = $request->request->get('ServeisGuarda');
                
                if (isset($botoFormulariServicios)) {
                    
                    // No hi ha click
                    
                    $session = $this->getRequest()->getSession();

                    $idservicio = $session->get('idservicio');
                    $ididioma = $session->get('ididioma');
                    
                    $NombreServicio = $request->request->get('nombreservicio');
                    
                    if ($NombreServicio != "") {

                        $em = $this->getDoctrine()->getEntityManager();
                        
                        // Aqui guardo la traduccio del servei
                        
                        $insertServeiTradu = new ServiciosTradus();
                        $insertServeiTradu->setIdservicio($idservicio);
                        $insertServeiTradu->setNombreservicio($NombreServicio);
                        $insertServeiTradu->setIdidioma($ididioma);
                        $insertServeiTradu->setCreatedAt(new \DateTime('now'));
                        $insertServeiTradu->setUpdatedAt(new \DateTime('now'));
                        $accioServiciosTradus = $insertServeiTradu;

                        $ec = $this->getDoctrine()->getEntityManager();
                        $ec->persist($accioServiciosTradus);
                        $ec->flush();
                        
                        $this->CleanSession();

                        $this->get('session')->setFlash("success", "La traduccion del servicio ha sido creado correctamente.");
                        return $this->redirect($this->generateUrl('ServiciosBundle_homepage_idioma', array('ididioma' => $ididioma)));
 
                    } else {
                        
                        $this->CleanSession();
                        
                        $this->get('session')->setFlash("error", "Los campos con asterisco son obligatorios.");
                        return $this->redirect($this->generateUrl('ServiciosBundle_tradu', array('ididioma' => $ididioma, 'idservicio' => $idservicio)));
                        
                    }                    
                    
                } else {
                    
                    // No hi ha click
                    $this->get('session')->setFlash("error", "No se que intentas hacer.");
                    return $this->redirect($this->generateUrl('ServiciosBundle_homepage'));                    
                    
                }
     
            break;
            default:
                
                // No hi ha configuracio inicial                
                return $this->redirect($this->generateUrl('ConfigBundle_homepage'));
                
            break;
        }
        
    }
    
}
